在本实验中，能够嗅探数据包是非常重要的。因为如果事情没有按预期进行，能够查看数据包的去向可以帮助我们找到问题所在。这里有几种不同的方式来进行数据包嗅探：

\begin{itemize}
	\item 在容器上运行 \texttt{tcpdump}。我们已经在每个容器上安装了 \texttt{tcpdump}。要嗅探通过特定接口的数据包，我们只需找出该接口的名称，然后执行以下操作（假设接口名为 \texttt{eth0}）：

	\begin{lstlisting}
	# tcpdump -i eth0 -n
	\end{lstlisting}

	需要注意的是，在容器内部，由于 Docker 创建的隔离，当我们在一个容器内运行 \texttt{tcpdump} 时，我们只能嗅探进出该容器的数据包，而不能嗅探其他容器之间的数据包。然而，如果容器在网络设置中使用了 \texttt{host} 模式，则可以嗅探其他容器的数据包。

	\item 在 VM 上运行 \texttt{tcpdump}。如果我们在虚拟机上运行 \texttt{tcpdump}，则不会受到容器的限制，并且可以嗅探所有容器之间传递的数据包。与容器不同，VM 中网络接口名称有所不同。在容器中，每个接口名通常以 \texttt{eth} 开头；而在 VM 中，由 Docker 创建的网络接口名称以 \texttt{br-} 开头，后面跟着网络的 ID。您总是可以使用 \texttt{ip address} 命令在 VM 和容器上获取接口名称。

	\item 我们还可以在 VM 上运行 Wireshark 来嗅探数据包。类似于 \texttt{tcpdump}，我们需要选择要嗅探的接口。
\end{itemize}